<?php	
	/**
	 * Klass LOGIN HANDLER - Hanterar funktionerna för att användaren ska kunna logga in och kunna logga ut. Innehåller även en funktion för att kontrollera om användaren är inloggad.
	 * "Pratar" med databasen och hämtar ut/sätter in information där ifrån och ger tillbaka den informationen till controllern eller view. 
	 */	 
	class LoginHandler {
		
		private $sessionUserLogsIn = 'sessionUserLogsIn';
		private $sessionUserObjectLocation = 'sessionUserObjectLocation'; //Sessionsvariabel för att lagra användarobjektet				
		private $database = null;

		//----- FUNKTION: CONSTRUCT ------------------------------------------------------------------------------------
		/**
		* Konstruktor funktion som lägger till en databas i vår privata variabel $database.
		* @param Database $database Databasen
		*/
		public function __construct(Database $database)
		{
			$this->database = $database;
		}
		

		//----- FUNKTION: USER IS LOGGED IN ----------------------------------------------------------------------------
		/**
		* Funktion för att kontrollera om användaren är inloggad med hjälp av session.
		* @return bool
		*/
		public function UserIsLoggedIn()
		{
			if(isset($_SESSION[$this -> sessionUserLogsIn])){
				return true;	
			}
			return false;
		}
		
				
		//----- FUNKTION: USER LOGS IN ---------------------------------------------------------------------------------
		/**
		* Funktion för att logga in användaren med hjälp av användarnamn och lösenord.
		* @param string $myUsername inparameter som innehåller datan som användaren skrev in.
		* @param string $myPassword inparameter som innehåller datan som användaren skrev in.
		* @return bool
		*/
		public function UserLogsIn($myUsername, $myPassword)
		{
			$query = "SELECT LoginID, CustomerID, LoginName, LoginPassword, LoginAdmin FROM login WHERE LoginName = ? LIMIT 1";
			if ($statement = $this->database->PrepareQuery($query)) {

				$statement->bind_param("s", $myUsername);
				$statement = $this->database->Select($statement);
				$statement->bind_result($database_LoginID, $database_CustomerID, $database_LoginName, $database_LoginPassword, $database_LoginAdmin);
				$statement->fetch();
				
				if ($statement->num_rows == 1) {
				
					if ($myPassword == $database_LoginPassword) {
						$_SESSION[$this->sessionUserLogsIn] = true;
						
						$user = new User();
						$user->LoginID = $database_LoginID;
						$user->CustomerID = $database_CustomerID;
						$user->LoginName = $database_LoginName;
						$user->LoginPassword = $database_LoginPassword;
						$user->LoginAdmin = $database_LoginAdmin;
						$_SESSION[$this->sessionUserObjectLocation] = $user;						
						return true;
					}
				} else {
					return false;
				}				
			}
			return false;					
		}


		//----- FUNKTION: GET ALL CUSTOMERS ----------------------------------------------------------------------------
		/**
		* Funktion för att hämta att kunder.
		* @return array $curstomers Retunerar en array med alla kunder. 
		*/
		public function GetAllCustomers()
		{
			$query = "SELECT * FROM customer WHERE CustomerID != 3";
			if ($statement = $this->database->PrepareQuery($query)) {
				$statement = $this->database->Select($statement);
				$statement->bind_result($customerID, $customerTypeID, $name, $organisationsId);

				$customers = array();

				while ($statement->fetch()) {
					$customer = new Customer();
					$customer->customerID = $customerID;
					$customer->customerTypeID = $customerTypeID;
					$customer->name = $name;
					$customer->organisationsId = $organisationsId;
					$customers[] = $customer;
				}
			}
			return $customers;
		}

		//----- FUNKTION: GET LOGGED IN USER NAME ----------------------------------------------------------------------
		/**
		 * Funktion för att hämta den inloggade användarens användarnamn.
		 * @return string Retunerar inloggningsnamnet.
		 * @return bool true/false
		 */
		public function GetLoggedInUserName()
		{
			if (isset($_SESSION[$this->sessionUserObjectLocation])) {
				return $_SESSION[$this->sessionUserObjectLocation]->LoginName;
			}
			return false;
		}

		//----- FUNKTION: GET LOGGED IN CUSTOMER ID --------------------------------------------------------------------
		/**
		 * Funktion för att hämta den inloggade kundens ID.
		 * @return int Retunerar kundens ID.
		 * @return bool true/false
		 */
		public function GetLoggedInCustomerID()
		{
			if (isset($_SESSION[$this->sessionUserObjectLocation])) {
				return $_SESSION[$this->sessionUserObjectLocation]->CustomerID;
			}
			return false;
		}

		//----- FUNKTION: USER IS ADMIN --------------------------------------------------------------------------------
		/**
		* Funktion för att kontrollera om användaren är admin.
		* @return string Retunerar att användaren är admin.
		*/
		public function UserIsAdmin()
		{
			if (isset ($_SESSION[$this->sessionUserObjectLocation])) {
				return $_SESSION[$this->sessionUserObjectLocation]->LoginAdmin;
			}			
		}

		
		//----- FUNKTION: USER LOGS OUT --------------------------------------------------------------------------------
		/**
		* Funktion för att logga ut användaren, genom att nollställa sessionvariabeln.
		*/
		public function UserLogsOut()
		{
			if (isset ($_SESSION[$this->sessionUserLogsIn])) {
				unset ($_SESSION[$this->sessionUserLogsIn]);				
			}			
		}
	}	
?>